#include <CtrlLib/CtrlLib.h>

using namespace Upp;

#include "Dialogs.h"

#include <Sql/sch_schema.h>
#include <Sql/sch_source.h>

#define IMAGECLASS CentroJyPImg
#define IMAGEFILE <CentroJyP/CentroJyP.iml>
#include <Draw/iml_source.h>

ListadoAfiliadosDlg::ListadoAfiliadosDlg()
{
	CtrlLayout(*this, "Centro de Jubilados y Pensionados \"Sagrada Familia\"");
	MaximizeBox().MinimizeBox();
	Sizeable().Zoomable();
	Maximize();
	AddFrame(menu);
	AddFrame(TopSeparatorFrame());
	menu.Set(THISBACK(MenuPrincipal));
	
	// Se completan las columnas de la vista de lista de afiliados
	lista_afiliados.SetTable(AFILIADO,NRO_AFILIADO);
	lista_afiliados.AddColumn(NRO_AFILIADO,"Nro. Afiliado").Edit(nro_afiliado);
	lista_afiliados.AddColumn(BENEFICIO,"Beneficio").Edit(beneficio);
	lista_afiliados.AddColumn(LEY,"Ley").Edit(ley);
	lista_afiliados.AddColumn(SUB,"Sub").Edit(sub);
	lista_afiliados.AddColumn(COD_DCTO,"Código Dcto.").Edit(cod_dcto);
	lista_afiliados.AddColumn(DNI,"Documento").Edit(dni);
	lista_afiliados.AddColumn(NRO_SOCIO,"Nro. de Socio").Edit(nro_socio);
	lista_afiliados.AddColumn(NOMBREYAPELLIDO,"Apellido y Nombre").Edit(apellido_nombre);
	lista_afiliados.AddColumn(OBSERVACIONES,"Observaciones").Edit(observaciones);
	lista_afiliados.AddColumn(DCTO,"Descuento").Edit(descuento);
	lista_afiliados.SetOrderBy(NOMBREYAPELLIDO);
	//lista_afiliados.Query();
	
	// Se agregan los Ctrls a los SqlCtrls.
	
	ctrls_afiliadodb
		(NRO_AFILIADO,nro_afiliado)
		(BENEFICIO,beneficio)
		(LEY,ley)
		(SUB,sub)
		(COD_DCTO,cod_dcto)
		(DNI,dni)
		(NRO_SOCIO,nro_socio)
		(NOMBREYAPELLIDO,apellido_nombre)
		(OBSERVACIONES,observaciones)
		(DCTO,descuento)
	;
}

/**
 Contenido del menú principal de la aplicacion
*/
void ListadoAfiliadosDlg::MenuPrincipal(Bar& bar)
{
	bar.Add("Archivo",THISBACK(MenuArchivo));
	bar.Add("Afiliados",THISBACK(MenuAfiliado));
	bar.Add("Opciones",THISBACK(MenuOpciones));
}


void ListadoAfiliadosDlg::MenuArchivo(Bar& bar)
{
	bar.Add("Salir",CentroJyPImg::salir(),THISBACK(Exit))
	.Key(K_CTRL_X);
}

void ListadoAfiliadosDlg::MenuAfiliado(Bar& bar)
{
	bar.Add("Agregar Afiliado",CentroJyPImg::nuevo_afiliado(),THISBACK(AgregarAfiliado))
	.Key(K_CTRL_A)
	.Tip("Permite agregar un nuevo afiliado al sistema");
	
	bar.Add("Modificar Afiliado",CentroJyPImg::nuevo_afiliado(),THISBACK(ModificarAfiliado))
	.Key(K_CTRL_M)
	.Tip("Permite modificar un afiliado del sistema");
}

void ListadoAfiliadosDlg::MenuOpciones(Bar& bar)
{
}

void ListadoAfiliadosDlg::Exit()
{
	Break();
}

void ListadoAfiliadosDlg::AgregarAfiliado()
{
	AltaAfiliadoDlg().Execute();
}

void ListadoAfiliadosDlg::ModificarAfiliado()
{
	ModificarAfiliadoDlg().Execute();
}

bool ListadoAfiliadosDlg::OpenConnection(String host,String dbname,String user,String pass, String port)
{
	String cmd =  String().Cat()<<"host="<<host<<" dbname="<<dbname<<" user="<<user<<" password="<<pass << " port="<<port;
	if(!pg_session.Open(cmd)) {
		Exclamation(pg_session.GetLastError());
		return false;
	}
	
#ifdef _DEBUG
	pg_session.SetTrace();
#endif
	lista_afiliados.SetSession(pg_session);
	SQL = pg_session;

	//schema
	Progress p;
	p.SetText(t_("Creating _DEBUG database"));
	SqlSchema sch(PGSQL);
	All_Tables(sch);
	if(sch.ScriptChanged(SqlSchema::UPGRADE))
		SqlPerformScript(sch.Upgrade(), p);
	if(sch.ScriptChanged(SqlSchema::ATTRIBUTES)) {
		SqlPerformScript(sch.Attributes(), p);
	}
	if(sch.ScriptChanged(SqlSchema::CONFIG)) {
		SqlPerformScript(sch.ConfigDrop(), p);
		SqlPerformScript(sch.Config(), p);
	}
	sch.SaveNormal();
	
	return true;
}